Die seriellen Schnittstellen (ASCI und CSI/O) des HD64180
Gerald Schröder
Der HD64180 stellt drei serielle Schnittstellen zur Verfügung. Bei zweien
handelt es sich um "Asynchronous Serial Connection Interfaces" (wie
RS-232/V24) und die dritte heißt "C1ocked Serial Input/Output".
Aschronous Serial Communication Interfces
Aufgabe dieser beiden Scbnittstellen ist die serielle Verbindung zu einem
Modem, Termial, (RS-232-)Drucker o.Ä. Zusätzlich gibt es einen "Multipro-
zessor-Modus", mit dem sich leicht ein System mit mehreren HD64180s auf-
bauen ließe, wobei die ASCIs dann als (Verbindung zum) System-Bus dienen
würden.
Jeder Kanal belegt 5 Ports: einen zum Lesen und einen zum Scbreiben der
Daten, einen für den Status (Zustand) des Kanals, zwei für die Einstellung
des Kanals (Baudrate usw.) und einige Zusatz-Informationen. Die Kanäle
unterscheiden sich in einigen Features, was ich aber jeweils anmerken
werde.
Die einzelnen Ports (Kanal 0 und Kanal 1):
Name Port Bezeichnung
CNTLA0 0 Control Register A Channel 0
CNTLB0 2 Control Register B Channel 0
STAT0 4 Status Register Channel 0
TDR0 6 Transmit Data Register Channel 0
RDR0 8 Receive Data Register Channel 0
CRTLA1 1 Control Register A Channel 1
CRTLB1 3 Control Register B Channel 1
STAT1 5 Status Register Channel 1
TDR1 7 Transmit Data Register Channel 1
RDR1 9 Receive Data Register Channel 1
Die einzelnen Bits der Ports:
CNTLA (Control A)
7 6 5 4 3 2 1 0
MPE RE TE Kanal 0: RTS=* Read: MPBR MOD2 MOD1 MOD0
Kanal 1: CKA1D Write: EFR
MPE = Multiprocessor Mode Enable
RE = Receiver Enable
TE = Transmitter Enable
RTSO* = Request To Send Channel 0 (aktiv Low, nur Kanal 0!)
CKA1D = Asynchronous Clock Channel 1 Disable (nur Kanal 1!)
MPBR = Multiprocessor Bit Receive (nur beim Lesen!)
EFR = Error Flag Reset (rur beim Schreiben!)
MODx = ASCII Data Format Mode
Anmerkung: Bit 4 (D4) hat bei Kanal 0 eine andere Bedeutung als bei Kanal
1. Bit 3 (D3) bedeutet beim Schreiben etwas anderes als beim Lesen.
CNTLB (Control B)
7 6 5 4 3 2 1 0
MPBT MP Read: CTS* PEO DR SS2 SS1 SS0
Write: PS
MPBT = Multiprocessor Bit Transmit
MP = Multiprocessor Mode
CTS = Clear To Send (nur beim Lesen!)
PS = Prescale (nur beim Scbreiben!)
PEO = Parity Evea/Odd
DR = Divide Ratio
SSx = Source/Speed Select
STAT (Status)
7 6 5 4 3 2 1
RDRF OVRN PE FE RIE Kanal 0: DCD0* TDRE TIE
Kanal 1: CTS1E
RDRF = Receive Data Register Full (nur lesbar)
OVRN = Overrun Error (nur lesbar)
PE = Parity Error (nur lesbar)
FE = Framing Error (nur lesbar)
RIE = Receive Interrupt Enable
DCD0* = Data Carrier Detect (aktiv Low, nur lesbar, nur Kanal 0!)
CTS1E = Clear To Send Channel 1 Enable (nur Kanal 1!)
TDRE = Transmit Data Register Empty (nur lesbar)
TIE = Transmit Interrupt Enable
Einstellung der Kanäle
Über CNTLB wird die Baudrate, der Multiprozessor-Mode und die Parität
festgelegt. D0 bis D3 und D5 sind für die Baudrate zuständig. Sie legen
fest, durch welche Werte die Taktfrequenz geteilt wird.
D5 1.Teiler D3 2.Teiler D2 D1 D0 3.Teiler
0 10 0 16 0 0 0 1
1 20 1 64 0 0 1 2
0 1 0 4
0 1 1 8
1 0 0 16
1 0 1 32
1 1 0 64
1 1 1 externer Takt
Der externe Takt wird von den Pins CKA0 (gemultiplext mit DREQ0*) bzw.
CKA1 (gemultiplext mit TENDt) abgenommen, wobei sich die Baudrate aus dem
externen Takt geteilt durcb 16 oder 64 (abhängig von D3) eribt. Dies ist
der Reset-Zustand. Falls die Baudrate vom System-Takt abgeleitet wird, wird
der resultierende Takt über CKA0/1 ausgegeben!
Zwei Rechenbeispiele (bei einem Systemtakt von 9,216 MHz):
19200 Baud: 19200 = 9.316.000 DIV 30 DIV 16 DIV 1 => D5-D0 = 1x0000
300 Baud: 300 = 9.216.000 DIV 30 DIV 64 DIV 16 => D5-D0 = 1x1100
D4 ist für die Art der Parität zuständig, falls Paritäts-Prüfung gewünscht
wird: D4=0: gerade Parität (EVEN); D4=1: ungerade Parität (ODD).
Zu guter Letzt D6 und D7, die für den Multiprozessor-Modus zuständig sind:
Wenn D6=1, dann wird statt des Paritäts-Bits ein Multiprozessor-Bit gesen-
det/empfangen. Wenn D7=1, wird beim Seden das Multiprozessor-Bit auf 1
gesetzt. Das könnte z.B. bedeuten; "Achtung, an alle anderen Prozessoren,
es kommt was für alle!"
Weitere Einstellungen erfolen über CNTLA. Mit D2 bis D0 wird das Daten-
format festgelegt:
Bit bedeutet
D2=0 7-Bit-Daten
=1 8-Bit-Daten
D1=0 keine Parität
=1 Paritt
D0=0 1 Stopit
=1 2 Stop-Bits
Wenn D3 mit 0 beschrieben wird, werden alle Fehlermeldungen für diesen
Kanal (im Register STAT0/1) gelöscht. Mit D4 kann bei Kanal 0 der Pin RTS0*
gesetzt/gelöscht werden (Request to Send = Gegenseite darf senden). Bei
Kanal 1 hingegen erfolgt hier die Auswahl, ob der Pin CKA1/TEND0* als Takt-
eingang (CKA1, D4=0) oder als Kennung für das Ende eines Blocktransfers
(TEND0, D4=1) benutzt wird.
Mit D5 wird der Sender ein/ausgeschaltet, mit D6 der Empfänger. D7 hat nur
i Multiprozessor-Modus eine Funktion. Wenn n D7=1, werden nur Daten mit
gesetztem MPB-Bit (s. D7 in CNTLB) angenommen, z.B. im Modus: "Empfange
nur Daten für alle Prozessoren!". Bei D7=0 werden alle Daten angenomme. So
ist folgende Kommunikation denkbar: Der Master-Prozessor sendet an alle
Prozessare durch gesetztes MPB-Bit gekennzeichnet, welche beiden Przes-
soren sich unterhalten dürfen. Diese schalten dann D7 auf 0 und wickeln
ihre Kommunikation ohne MPB-Bit ab. Dann schalten sie D7 auf 1 und der
Master-Prozessor wird benachrichtigt, die Sache wieder zu übernehen.
Zu guter Letzt noch die Einstellungen, die über das Status-Register STAT
vorgenommen werden. D0 legt fest, ob ein Interrupt erfolgt, wenn der Kanal
sedebereit ist. Wenn D3=1, wird auch ein Interrupt ausgelöst, wenn ein
Zeichen emfangen wurde oder ein Fehler auftrat. Bei Kanal 1 kann über D2
ausgewählt werden, ob der Pin CTS1*/RXS als CTS* (D2=1, Clear TO Send =
HD64180 darf senden oder als Daten-Epfangs-Pin für CSI/0 (D2=0) dient.
Senden/Empfangen
Der Stats des Kanals kann über STAT befragt werden. D1=1 bedetet, daß
Daten gesedet werden dürfen. Wenn dann ein Byte in das Sende-Register
TDR geschrieben wird, geht D1 auf 0, bis das Zeichen gesendet wurde.
D7=1 bedeutet, daß ein Zeichen empfangen wurde und jetzt aus dem Empfangs-
Register RDR gelesen werden kann oder daß bei Empfangen ein Fehler auf-
getreten ist. Nach dem Lesen des Bytes aus RDR wird D7 gelöscht. Folgende
Fehler werden erkannt:
D6 Overrun (letztes Byte wurde nicht schnell genug aus RDR geholt)
D5 Parity (das Paritäts-Bit des Zeichens warfalsch)
D4 Framing (das/die Stop-Bits stimmten nicht)
Falls ein Febler auftrat, muß dieser gelöscht werden, indem D3 von CNTLLA
mit 0 beschrieben wird. Achtung: dabei werden dann auch die anderen Ein-
stellungen von CNTLA geändert!
Über D2 aus STAT kann bei Kanal 0 noch der Zustand des Signals "Data
Carrier Detect" abgefragt werden. D2 wird auf 1 gesetzt, wenn das Signal am
Pin DCD0* irgendwann mal HIGH war oder noch ist. D2 wird nach dem Lesen auf
0 gesetzt, wenn inzwischen DCD0*=0 ist. Solange D2=1, wird nichts empfan-
gen. Diese Verbindung ist nur bei bestimmten Modems sinnvoll.
Über D3 aus CTNLA kann das Multiprozessor-Bit des letzten empfangenen
Bytes abgefragt werden. D5 aus CNTLA gibt Ausunft über den Zustand des
Pins CTS*. Für Kanal 0 gilt, daß der Kanal erst sendebereit wird STA0,
D1=1), wenn der Pin CTS0*=0. CTS1 kann nur abgefragt werden und hat nur
einen Einfluß auf die Sedebereitschaft, wenn D2 aus STAT1 auf 1 gesetzt wurde (CTS1E = CTS-Enable Kanal 1).
Clocked Serial Input Output
Diese Schnittstelle dient zur Verbindung mehrerer Prozessoren, wobei die
anderen Prozessoren nicht unbedigt HD6480s sein mssen. Aber sie müssen
über eine gemeinsame (sychronisierte) Taktauelle verfügen und die Sende-/
Empfangs-Operation muß in beiden Prozessoren gleichzeitig beginnen!
Der HD64180 kann nicht gleichzeitig empfangen und seden. Es gibt nur ein
Sede/Empfangregister: TRDR (Transmit/Receive Data Register), Port 0Bh.
Es sind auch nur einige Einstellungen möglich, so daß nur ein Kontroll-
Regiser nötig ist: CNTR (Control), Port 0Ah. Der Aufbau dieses Registers:
CNTR (Control)
7 6 5 4 3 2 1 1
--------------------------------------
EF EIE RE TE - SS2 SS1 SS0
EF = End Flag (nur lesbar)
EIE = End Interrupt Enable
RE = Receive Eable
TE = Transit Enable
SSx = Speed Select
Einstellungen
Es kann nur die Baudrate eingestellt werden. Wenn die Baudrate neu gesetzt
wird, sollte nicht gleicheitig ein Sende-/Empfaggs-Zyklus (s.u. gestartet
werden. Der System-Takt wird durch die folenden Werte geteilt (bier für
9.216 MHz):
SS2 SS1 SS0 Teiler ergibt Baudrate
-----------------------------------
0 0 0 20 460800
0 0 1 40 230400
0 1 0 80 115200
0 1 1 160 57600
1 0 0 320 28800
1 0 1 640 14400
1 1 0 1280 7200
1 1 1 externer Takt (kleiner als 460800)
Bei 111 wird der extere Takt über den Pin CKS eingelesen; asonsten
wid der resultierende Takt hier ausgegeben.
Empfangen/Senden
Zuerst muß abgefragt werden, ob der Sender gerade aktiv ist. Erst wenn D7
aus CNTR gesetzt ist, kann die Operation beginnen. Zum Senden wird das
Byte in TRDR geschrieben und dann D4 in CNTR gesetzt. Gleichzeitig wird
die Bauarate (wieder) gesetzt. Sie sollte aber nicht verändert werden, da
es sonst Sende-Probleme geben kann. Die Operation ist erst beendet, wenn D7
wieder auf 1 geht. Falls D6 gesetzt wurde, wird dann ein Interrupt ausge-
löst.
Beim Empfangen wird D5 gesetzt (zusammen mit der Baudrate). Nun beginnt
der Empfangs-Vorgang, der immer gleich lang dauert. Wenn D7 wieder auf 1
geht, kann das Byte aus TRDR gelesen werden. Wenn vor dem Empfangen D6
gesetzt wurde, wird ein Interrupt ausgelöst, sobald D7 auf 1 springt. Es
ist zu beachten, daß der Empfangs-Pin (RXS) mit CTS* für Kanal 1 gemulti-
plext ist. Vor dem Empfang muß also über D2 von STAT1 die Funktion "Pin
RXS/CTS1* als RXS* ausgewählt werden.
|